package initialize

import (
	"gin-template/config"
	"gin-template/global"
	"log"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func InitMysql() {
	var db *gorm.DB
	var err error

	for i := 0; i < config.AppConfig.Mysql.Retry; i++ {
		db, err = gorm.Open(mysql.Open(config.AppConfig.Mysql.Dsn()), &gorm.Config{})
		if err != nil {
			log.Printf("failed to connect database, %v, retry: %d", err, i)
			time.Sleep(time.Duration(config.AppConfig.Mysql.RetryDelay) * time.Second)
		} else {
			break
		}
	}

	sqlDB, err := db.DB()
	if err != nil {
		log.Fatalf("failed to get database, %v", err)
	}

	// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
	sqlDB.SetMaxIdleConns(config.AppConfig.Mysql.MaxIdleConns)
	// SetMaxOpenConns 设置打开数据库连接的最大数量。
	sqlDB.SetMaxOpenConns(config.AppConfig.Mysql.MaxOpenConns)
	// SetConnMaxLifetime 设置了连接可用的最大时间。
	sqlDB.SetConnMaxLifetime(time.Hour)

	global.MysqlDB = db
}
